perm filename BROWSE.IL[TIM,LSP]2 blob sn#681177 filedate 1982-10-06 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	 BENCHMARK TO CREATE AND BROWSE THROUGH AN AI-LIKE DATA BASE OF UNITS
C00010 ENDMK
CāŠ—;
;;; BENCHMARK TO CREATE AND BROWSE THROUGH AN AI-LIKE DATA BASE OF UNITS

;;; N IS # OF SYMBOLS
;;; M IS MAXIMUM AMOUNT OF STUFF ON THE PLIST
;;; NPATS IS THE NUMBER OF BASIC PATTERNS ON THE UNIT
;;; IPATS IS THE INSTANTIATED COPIES OF THE PATTERNS

(DECLARE (LOCALVARS . T)(GLOBALARS RAND))

(RPAQQ BROWSECOMS ((FNS * BROWSECOMS)))


(RPAQQ BROWSEFNS
       (INVESTIGATE BROWSE MATCH RANDOMIZE RANDOM SEED INIT))


(* (FIXSW T))


(DEFINEQ
 (INIT
  (LAMBDA (N M NPATS IPATS) 
    ((LAMBDA (IPATS) 
       (PROG (P) 
	     (SETQ P IPATS)
	LOOP (COND ((NULL (CDR P)) (RETURN (RPLACD P IPATS))))
	     (SETQ P (CDR P))
	     (GO LOOP))
       ((LAMBDA (G0012 G0013 G0014 G0015) 
	  (PROG (N I NAME A) 
		(PROGN (SETQ N G0012)
		       (SETQ I G0013)
		       (SETQ NAME G0014)
		       (SETQ A G0015))
	   LOOP	(COND ((IEQP N 0) (RETURN A)))
		(SETQ A (CONS NAME A))
		(FOR I FROM I TO 1 BY -1 DO
		     (PUTPROP NAME (GENSYM) NIL)
		     FINALLY (RETURN NIL))
		(PUTPROP
		 NAME
		 (QUOTE PATTERN)
		 ((LAMBDA (G0016 G0017 G0018) 
		    (PROG (I IPATS A) 
			  (PROGN (SETQ I G0016)
				 (SETQ IPATS G0017)
				 (SETQ A G0018))
		     LOOP (COND ((IEQP I 0) (RETURN A)))
			  (SETQ A (CONS (CAR IPATS) A))
			  ((LAMBDA (G0016 G0017) 
			     (PROGN (SETQ I G0016)
				    (SETQ IPATS G0017)))
			   (IDIFFERENCE I 1)
			   (CDR IPATS))
			  (GO LOOP)))
		  NPATS
		  IPATS
		  NIL))
		(FOR J FROM (IDIFFERENCE M I) TO 1 BY -1 DO
		     (PUTPROP NAME (GENSYM) NIL)
		     FINALLY (RETURN NIL))
		((LAMBDA (G0012 G0013 G0014) 
		   (PROGN (SETQ N G0012) (SETQ I G0013) (SETQ NAME
							      G0014)))
		 (IDIFFERENCE N 1)
		 (COND ((IEQP I 0) M) (T (IDIFFERENCE I 1)))
		 (GENSYM))
		(GO LOOP)))
	N
	M
	(GENSYM)
	NIL))
     (SUBST NIL NIL IPATS)))))


(* MOD)


(* (SPECIAL RAND) (FIXNUM RAND))


(RPAQ RAND 21)


(DEFINEQ (SEED (LAMBDA NIL (RPAQ RAND 21))))


(DEFINEQ
 (RANDOM (LAMBDA NIL (RPAQ RAND (REMAINDER (ITIMES RAND 17) 251)))))


(DEFINEQ
 (RANDOMIZE
  (LAMBDA (L) 
    (PROG (A) 
	  (SETQ A NIL)
     LOOP (COND ((NULL L) (RETURN A)))
	  ((LAMBDA (N) 
	     (COND
	      ((IEQP N 0) (SETQ A (CONS (CAR L) A)) (SETQ L (CDR L)))
	      (T
	       ((LAMBDA (G0021 G0022) 
		  (PROG (N X) 
			(PROGN (SETQ N G0021) (SETQ X G0022))
		   LOOP	(COND
			 ((IEQP N 1)
			  (RETURN (PROGN (SETQ A (CONS (CADR X) A))
					 (RPLACD X (CDDR X))))))
			((LAMBDA (G0021 G0022) 
			   (PROGN (SETQ N G0021) (SETQ X G0022)))
			 (IDIFFERENCE N 1)
			 (CDR X))
			(GO LOOP)))
		N
		L))))
	   (REMAINDER (RANDOM) (LENGTH L)))
	  (SETQ A NIL)
	  (GO LOOP)))))


(* CHAR1)


(DEFINEQ
 (MATCH
  (LAMBDA (PAT DAT ALIST) 
    (COND
     ((NULL PAT) (NULL DAT))
     ((NULL DAT) NIL)
     ((OR (EQ (CAR PAT) (QUOTE ?)) (EQ (CAR PAT) (CAR DAT)))
      (MATCH (CDR PAT) (CDR DAT) ALIST))
     ((EQ (CAR PAT) (QUOTE *)) (OR (MATCH (CDR PAT) DAT ALIST)
				   (MATCH (CDR PAT) (CDR DAT) ALIST)
				   (MATCH PAT (CDR DAT) ALIST)))
     (T
      (COND
       ((ATOM (CAR PAT))
	(COND
	 ((EQ (NTHCHAR (CAR PAT) 1) (QUOTE ?))
	  ((LAMBDA (VAL) 
	     (COND
	      (VAL (MATCH (CONS (CDR VAL) (CDR PAT)) DAT ALIST))
	      (T (MATCH (CDR PAT)
			(CDR DAT)
			(CONS (CONS (CAR PAT) (CAR DAT)) ALIST)))))
	   (ASSOC (CAR PAT) ALIST)))
	 ((EQ (NTHCHAR (CAR PAT) 1) (QUOTE *))
	  ((LAMBDA (VAL) 
	     (COND
	      (VAL (MATCH (APPEND (CDR VAL) (CDR PAT)) DAT ALIST))
	      (T ((LAMBDA (G0024 G0025 G0026) 
		    (PROG (L E D) 
			  (PROGN (SETQ L G0024)
				 (SETQ E G0025)
				 (SETQ D G0026))
		     LOOP (COND ((NULL E) (RETURN NIL)))
			  (COND
			   ((MATCH (CDR PAT)
				   D
				   (CONS (CONS (CAR PAT) L) ALIST))
			    (RETURN T)))
			  ((LAMBDA (G0024 G0025 G0026) 
			     (PROGN (SETQ L G0024)
				    (SETQ E G0025)
				    (SETQ D G0026)))
			   (NCONC L (CONS (CAR D) NIL))
			   (CDR E)
			   (CDR D))
			  (GO LOOP)))
		  NIL
		  (CONS NIL DAT)
		  DAT))))
	   (ASSOC (CAR PAT) ALIST)))))
       (T (AND (NOT (ATOM (CAR DAT)))
	       (MATCH (CAR PAT) (CAR DAT) ALIST)
	       (MATCH (CDR PAT) (CDR DAT) ALIST)))))))))


(DEFINEQ
 (BROWSE (LAMBDA NIL 
	   (SEED)
	   (INVESTIGATE
	    (RANDOMIZE
	     (INIT 100
		   10
		   4
		   (QUOTE ((A A A B B B B A A A A A B B A A A)
			   (A A B B B B A A (A A) (B B))
			   (A A A B (B A) B A B A)))))
	    (QUOTE ((*A ?B *B ?B A *A A *B *A)
		    (*A *B *B *A (*A) (*B))
		    (? ? * (B A) * ? ?)))))))


(DEFINEQ
 (INVESTIGATE
  (LAMBDA (UNITS PATS) 
    (PROG (UNITS) 
	  (SETQ UNITS UNITS)
     LOOP (COND ((NULL UNITS) (RETURN NIL)))
	  (PROG (P) 
		(SETQ P (GETPROP (CAR UNITS) (QUOTE PATTERN)))
	   LOOP	(COND ((NULL P) (RETURN NIL)))
		(PROG (PATS) 
		      (SETQ PATS PATS)
		 LOOP (COND ((NULL PATS) (RETURN NIL)))
		      (MATCH (CAR PATS) (CAR P) NIL)
		      (SETQ PATS (CDR PATS))
		      (GO LOOP))
		(SETQ P (CDR P))
		(GO LOOP))
	  (SETQ UNITS (CDR UNITS))
	  (GO LOOP)))))

STOP